﻿using System;
using System.Drawing;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Vtron.ATSP.Infrastructure;

namespace Vtron.ATSP.Projector.UnitTest
{
    /// <summary>
    /// 投影机通讯接口测试
    ///     这是 Vtron.ATSP.Projector.ProjectorCom 的测试类，旨在
    ///     包含所有 Vtron.ATSP.Projector.ProjectorCom 单元测试
    /// </summary>
    /// <remarks>
    ///     <创建人>邓穗捷</创建人>
    ///     <创建时间>2014-08-21</创建时间>
    ///     <修订人></修订人>
    ///     <修订时间></修订时间>
    ///     <修订说明></修订说明>
    /// </remarks>
    [TestClass]
    public class ProjectorComRealSocketHandlerTest
    {
        #region Fields

        private ProjectorCom projectorCom = default(ProjectorCom);

        #endregion

        #region Initialize

        /// <summary>
        /// 测试类的初始化运行配置
        ///     请根据实际测试的投影机设置 Utils.ProjectorIP 的值。
        /// </summary>
        /// <remarks>
        ///     <创建人>邓穗捷</创建人>
        ///     <创建时间>2014-08-21</创建时间>
        ///     <修订人></修订人>
        ///     <修订时间></修订时间>
        ///     <修订说明></修订说明>
        /// </remarks>
        [ClassInitialize]
        public static void ClassInitializeTest(TestContext testContext)
        {
            Utils.ProjectorIP = "10.4.1.30";
        }

        /// <summary>
        /// 测试类运行结束后清理运行配置释放资源
        /// </summary>
        /// <remarks>
        ///     <创建人>邓穗捷</创建人>
        ///     <创建时间>2014-08-21</创建时间>
        ///     <修订人></修订人>
        ///     <修订时间></修订时间>
        ///     <修订说明></修订说明>
        /// </remarks>
        [ClassCleanup]
        public static void ClassCleanupTest()
        {
            Utils.ProjectorIP = String.Empty;
        }

        /// <summary>
        /// 测试方法的初始化运行配置
        /// </summary>
        /// <remarks>
        ///     <创建人>邓穗捷</创建人>
        ///     <创建时间>2014-08-21</创建时间>
        ///     <修订人></修订人>
        ///     <修订时间></修订时间>
        ///     <修订说明></修订说明>
        /// </remarks>
        [TestInitialize]
        public void InitializeTest()
        {
            ISocketHandler socketHandler = new SocketHandler();
            projectorCom = new ProjectorCom(socketHandler);
        }

        /// <summary>
        /// 测试方法的初始化运行配置
        /// </summary>
        /// <remarks>
        ///     <创建人>邓穗捷</创建人>
        ///     <创建时间>2014-08-21</创建时间>
        ///     <修订人></修订人>
        ///     <修订时间></修订时间>
        ///     <修订说明></修订说明>
        /// </remarks>
        [TestCleanup]
        public void CleanupTest()
        {
            projectorCom = null;
        }

        #endregion

        #region CheckConnect

        /// <summary>
        /// 测试 CheckConnect 方法
        /// </summary>
        /// <remarks>
        ///     <创建人>邓穗捷</创建人>
        ///     <创建时间>2014-08-21</创建时间>
        ///     <修订人></修订人>
        ///     <修订时间></修订时间>
        ///     <修订说明></修订说明>
        /// </remarks>
        [TestMethod, Description("真实测试投影机连接")]
        public void TestCheckConnect()
        {
            bool expected = true;

            bool actual = projectorCom.CheckConnect();

            Assert.AreEqual(expected, actual);
        }

        #endregion

        #region Start

        /// <summary>
        /// 测试 Start 方法
        /// </summary>
        /// <remarks>
        ///     <创建人>邓穗捷</创建人>
        ///     <创建时间>2014-08-21</创建时间>
        ///     <修订人></修订人>
        ///     <修订时间></修订时间>
        ///     <修订说明></修订说明>
        /// </remarks>
        [TestMethod, Description("真实测试投影机开机")]
        public void TestStart()
        {
            bool expected = true;

            bool actual = projectorCom.Start();

            Assert.AreEqual(expected, actual);
        }

        #endregion

        #region Await

        /// <summary>
        /// 测试 Await 方法
        /// </summary>
        /// <remarks>
        ///     <创建人>邓穗捷</创建人>
        ///     <创建时间>2014-08-21</创建时间>
        ///     <修订人></修订人>
        ///     <修订时间></修订时间>
        ///     <修订说明></修订说明>
        /// </remarks>
        [TestMethod, Description("真实测试投影机待机")]
        public void TestAwait()
        {
            bool expected = true;

            bool actual = projectorCom.Await();

            Assert.AreEqual(expected, actual);
        }

        #endregion

        #region SetDesktop

        /// <summary>
        /// 测试 SetDesktop 方法
        /// </summary>
        /// <remarks>
        ///     <创建人>邓穗捷</创建人>
        ///     <创建时间>2014-08-21</创建时间>
        ///     <修订人></修订人>
        ///     <修订时间></修订时间>
        ///     <修订说明></修订说明>
        /// </remarks>
        [TestMethod, Description("真实测试投影机显示白色")]
        public void TestSetDesktopWhite()
        {
            bool expected = true;

            bool actual = projectorCom.SetDesktop(Color.White);

            Assert.AreEqual(expected, actual);
        }

        /// <summary>
        /// 测试 SetDesktop 方法
        /// </summary>
        /// <remarks>
        ///     <创建人>邓穗捷</创建人>
        ///     <创建时间>2014-08-21</创建时间>
        ///     <修订人></修订人>
        ///     <修订时间></修订时间>
        ///     <修订说明></修订说明>
        /// </remarks>
        [TestMethod, Description("真实测试投影机显示红色")]
        public void TestSetDesktopRed()
        {
            bool expected = true;

            bool actual = projectorCom.SetDesktop(Color.Red);

            Assert.AreEqual(expected, actual);
        }

        /// <summary>
        /// 测试 SetDesktop 方法
        /// </summary>
        /// <remarks>
        ///     <创建人>邓穗捷</创建人>
        ///     <创建时间>2014-08-21</创建时间>
        ///     <修订人></修订人>
        ///     <修订时间></修订时间>
        ///     <修订说明></修订说明>
        /// </remarks>
        [TestMethod, Description("真实测试投影机显示绿色")]
        public void TestSetDesktopGreen()
        {
            bool expected = true;

            bool actual = projectorCom.SetDesktop(Color.Green);

            Assert.AreEqual(expected, actual);
        }

        /// <summary>
        /// 测试 SetDesktop 方法
        /// </summary>
        /// <remarks>
        ///     <创建人>邓穗捷</创建人>
        ///     <创建时间>2014-08-21</创建时间>
        ///     <修订人></修订人>
        ///     <修订时间></修订时间>
        ///     <修订说明></修订说明>
        /// </remarks>
        [TestMethod, Description("真实测试投影机显示蓝色")]
        public void TestSetDesktopBlue()
        {
            bool expected = true;

            bool actual = projectorCom.SetDesktop(Color.Blue);

            Assert.AreEqual(expected, actual);
        }

        /// <summary>
        /// 测试 SetDesktop 方法
        /// </summary>
        /// <remarks>
        ///     <创建人>邓穗捷</创建人>
        ///     <创建时间>2014-08-21</创建时间>
        ///     <修订人></修订人>
        ///     <修订时间></修订时间>
        ///     <修订说明></修订说明>
        /// </remarks>
        [TestMethod, Description("真实测试投影机显示黑色")]
        public void TestSetDesktopBlack()
        {
            bool expected = true;

            bool actual = projectorCom.SetDesktop(Color.Black);

            Assert.AreEqual(expected, actual);
        }

        #endregion
    }
}
